package model

import (
	"time"
	"user_srv/basic/config"
)

type XqChatMessages struct {
	Id        int64     `gorm:"column:id;type:bigint;primaryKey;not null;" json:"id"`
	MatchId   int64     `gorm:"column:match_id;type:bigint;comment:匹配ID;not null;" json:"match_id"`                     // 匹配ID
	SenderId  int64     `gorm:"column:sender_id;type:bigint;comment:发送者ID;not null;" json:"sender_id"`                  // 发送者ID
	Content   string    `gorm:"column:content;type:text;comment:消息内容;not null;" json:"content"`                         // 消息内容
	MsgType   int8      `gorm:"column:msg_type;type:tinyint(1);comment:消息类型 1:文本 2:图片 3:语音;default:1;" json:"msg_type"` // 消息类型 1:文本 2:图片 3:语音
	IsRead    int8      `gorm:"column:is_read;type:tinyint(1);comment:是否已读;default:0;" json:"is_read"`                  // 是否已读
	CreatedAt time.Time `gorm:"column:created_at;type:timestamp;default:CURRENT_TIMESTAMP;" json:"created_at"`
}

func (x *XqChatMessages) TableName() string {
	// 表名
	return "xq_chat_messages"
}
func (x *XqChatMessages) Create() error {
	// 创建
	return config.DB.Create(&x).Error
}
func (x *XqChatMessages) Delete(where XqChatMessages) error {
	// 删除
	return config.DB.Where(where).Delete(&x).Error
}
func (x *XqChatMessages) Update(where XqChatMessages) error {
	// 更新
	return config.DB.Where(where).Updates(&x).Error
}
func (x *XqChatMessages) List(where XqChatMessages) ([]XqChatMessages, error) {
	// 查询
	var messages []XqChatMessages
	err := config.DB.Where(where).Find(&messages).Error
	return messages, err
}

func (x *XqChatMessages) ListByMatchId(matchId int64, limit, offset int) ([]XqChatMessages, error) {
	var messages []XqChatMessages
	query := config.DB.Where("match_id = ?", matchId)
	if limit > 0 {
		query = query.Limit(limit)
	}
	if offset > 0 {
		query = query.Offset(offset)
	}
	err := query.Order("created_at DESC").Find(&messages).Error
	return messages, err
}

// 获取匹配的最后一条消息
func (x *XqChatMessages) GetLastMessageByMatchId(matchId int64) (*XqChatMessages, error) {
	var message XqChatMessages
	err := config.DB.Where("match_id = ?", matchId).Order("created_at DESC").First(&message).Error
	return &message, err
}

// 标记消息为已读
func (x *XqChatMessages) MarkAsRead(matchId, userId int64) error {
	return config.DB.Model(&XqChatMessages{}).Where("match_id = ? AND sender_id != ? AND is_read = 0", matchId, userId).Update("is_read", 1).Error
}
